package com.yc.javaee.多线程;

public class 创建线程 {

    public static void main(String[] args) throws InterruptedException {
        // 继承 Thread
        MyThread myThread = new MyThread();
        myThread.start(); // 启动线程, CPU 会通过调度执行run方法
        // start 方法一执行, 那么start后的代码就可以继续执行
        myThread.run(); // 直接运行run方法

        // 匿名类 ==> 基于继承
        Thread t1 = new Thread(){
            @Override
            public void run() {
                System.out.println("t1 运行中....");
            }
        };

        // 创建线程对象, 传 Runnable 接口对象
        MyRunnable myRunnable = new MyRunnable();
        Thread t2 = new Thread(myRunnable);
        t2.start();

        // Runnable 匿名类实现
        // 只有一个方法的接口 => 函数接口 => lambda 表达式(箭头函数)
        Thread t3 = new Thread(()->{
            System.out.println(
                    Thread.currentThread().getName()+" t3 运行中....");
        },"我的线程");
        t3.start();

        // 线程静态方法
        Thread thread = Thread.currentThread();// 获取当前线程
        Thread.sleep(1000); // 休眠 1 秒钟

        // 系统会默认分配线程名, 也可以自定义
        System.out.println("线程名:" + thread.getName());
        // int 值, 全局唯一
        System.out.println("线程id:" + thread.getId());
        // 1~10 默认 5 优先级与数值成正比  CPU会优先分配计算片给高优先级线程
        System.out.println("线程优先级:" + thread.getPriority());
        System.out.println("线程状态:" + thread.getState());
        System.out.println("线程是否活动:" + thread.isAlive());
        System.out.println("线程是否是精灵线程:" + thread.isDaemon());
    }

}

class MyThread extends Thread{
    @Override
    public void run() {
        // 线程启动之后, 执行的代码块
        System.out.println("MyThread 运行中....");
    }
}

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("MyRunnable 运行中....");
    }
}
